import { exec } from './exec.js';

/**
 * Git 相关的工具函数
 */
class GitUtils {
  /**
   * 获取当前分支名
   */
  static getCurrentBranch() {
    return exec('git branch --show-current', { silent: true });
  }

  /**
   * 检查分支是否存在
   */
  static branchExists(branch) {
    const result = exec(`git show-ref --verify --quiet refs/heads/${branch}`, {
      silent: true,
      ignoreError: true,
    });
    return result !== null;
  }

  /**
   * 获取所有匹配模式的分支
   */
  static getBranches(pattern) {
    const result = exec(`git branch --list "${pattern}"`, { silent: true });
    return result
      ? result
          .split('\n')
          .map((b) => b.trim())
          .filter(Boolean)
      : [];
  }

  /**
   * 切换分支
   */
  static checkout(branch) {
    return exec(`git checkout ${branch}`, { silent: true });
  }

  /**
   * 拉取最新代码
   */
  static pull(remote = 'origin', branch = 'main') {
    return exec(`git pull ${remote} ${branch}`, { silent: true });
  }

  /**
   * 检查远程分支是否存在
   */
  static remoteExists(branch, remote = 'origin') {
    const result = exec(`git ls-remote --heads ${remote} refs/heads/${branch}`, {
      silent: true,
      ignoreError: true,
    });
    // 由于是refs/heads/${branch}精确匹配，所以，只要有返回，就说明存在
    return result !== null && result.trim() !== '';
  }
}

export { GitUtils };
